/**
 * 
 */
package org.stars.util.reflect;

import java.lang.reflect.Method;

/**
 * Classe base dei getter e dei setter. Raccoglie gli attributi.
 * <p>
 * 
 * @author Francesco Benincasa (908099)
 * 
 */
public abstract class Accessor {

	/**
	 * Costruttore
	 * 
	 * @param name
	 * 		nome della proprietà
	 * @param method
	 * 		metodo analizzato
	 * @param type
	 * 		tipo della proprietà
	 */
	public Accessor(String name, Method method, Class<?> type) {
		this.propertyName = name;
		this.method = method;
		this.propertyType = type;

		DontCompare annotationEquals = method.getAnnotation(DontCompare.class);

		ignoredOnEquals = false;
		if (annotationEquals != null) {
			ignoredOnEquals = true;
		}

		DontCopy annotationCopy = method.getAnnotation(DontCopy.class);

		ignoredOnCopy = false;
		if (annotationCopy != null) {
			ignoredOnCopy = true;
		}
	}

	/**
	 * nome della proprietà
	 */
	protected String	propertyName;

	/**
	 * @return the propertyName
	 */
	public String getPropertyName() {
		return propertyName;
	}

	/**
	 * @return the type
	 */
	public Class<?> getPropertyType() {
		return propertyType;
	}

	/**
	 * @return the method
	 */
	public Method getMethod() {
		return method;
	}

	/**
	 * tipo della proprietà
	 */
	protected Class<?>	propertyType;
	
	/**
	 * metodo sul quale si basa l'accessor
	 */
	protected Method	method;

	/**
	 * indica se l'accessor deve essere ignorato in fase di comparazione
	 * di bean mediante le proprietà
	 */
	protected boolean	ignoredOnEquals;

	/**
	 * @return the ignoredOnEquals
	 */
	public boolean isIgnoredOnEquals() {
		return ignoredOnEquals;
	}

	/**
	 * indica se l'accessor deve essere ignorato in fase di copia
	 * di proprietà 
	 */
	protected boolean	ignoredOnCopy;

	/**
	 * @return the ignoredOnEquals
	 */
	public boolean isIgnoredOnCopy() {
		return ignoredOnCopy;
	}

}
